{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "0ad1fbe7-107b-4668-ae4d-8ce4ae9a4400",
   "metadata": {},
   "outputs": [],
   "source": [
    "from __future__ import annotations\n",
    "\n",
    "from dataclasses import dataclass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c2d3a9f4-dfdb-4ced-bbcd-3dfd1780af80",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "7.29.0\n"
     ]
    }
   ],
   "source": [
    "import IPython\n",
    "\n",
    "print(IPython.__version__)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "21e7a4a1-0cf8-48cc-823c-dca698ae6853",
   "metadata": {},
   "source": [
    "Supported IPython display formatters:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "053cdbc4-b157-4e3e-9c86-8f374770d006",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "text/plain\n",
      "text/html\n",
      "text/markdown\n",
      "image/svg+xml\n",
      "image/png\n",
      "application/pdf\n",
      "image/jpeg\n",
      "text/latex\n",
      "application/json\n",
      "application/javascript\n"
     ]
    }
   ],
   "source": [
    "ip = get_ipython()\n",
    "for mime in ip.display_formatter.formatters:\n",
    "    print(mime)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d79b063d-ce81-497b-a0ea-5b2e2972e845",
   "metadata": {},
   "source": [
    "Let's write a simple class that will output different mime:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "c847636c-1c45-432e-9d8d-7310dd7f5637",
   "metadata": {},
   "outputs": [],
   "source": [
    "@dataclass\n",
    "class Mime:\n",
    "    math: str\n",
    "\n",
    "    def _repr_mimebundle_(\n",
    "        self,\n",
    "        include: Container[str] | None = None,\n",
    "        exclude: Container[str] | None = None,\n",
    "        **kwargs,\n",
    "    ) -> dict[str, str]:\n",
    "        string = self.math\n",
    "        data = {\n",
    "            \"text/plain\": string,\n",
    "            \"text/html\": (latex := f\"\\\\[{string}\\\\]\"),\n",
    "            \"text/markdown\": f\"$${string}$$\",\n",
    "            # \"image/svg+xml\":,\n",
    "            # \"image/png\":,\n",
    "            # \"application/pdf\":,\n",
    "            # \"image/jpeg\":,\n",
    "            \"text/latex\": latex,\n",
    "            # \"application/json\":,\n",
    "            # \"application/javascript\":,\n",
    "        }\n",
    "        if include:\n",
    "            data = {k: v for k, v in data.items() if k in include}\n",
    "        if exclude:\n",
    "            data = {k: v for k, v in data.items() if k not in exclude}\n",
    "        return data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "4fa54f22-0c3a-4809-91f7-ea7101ff1907",
   "metadata": {},
   "outputs": [],
   "source": [
    "mime = Mime(\"E = mc^2\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "c419e6a6-240c-4af0-a244-5f1526705c30",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\\[E = mc^2\\]"
      ],
      "text/latex": [
       "\\[E = mc^2\\]"
      ],
      "text/markdown": [
       "$$E = mc^2$$"
      ],
      "text/plain": [
       "E = mc^2"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mime"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bf140b8e-16ac-4670-9778-f1c1d9486f9d",
   "metadata": {},
   "source": [
    "Note that #7561 made ipynb reader aware of this, and #7563 made ipynb writer aware of this."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
